/*
 * Copyright (C) 2010 Moduad Co., Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package cc.telecomdigital.tdstock.activity.groups.more.push.client;

import java.util.Map;

import org.jivesoftware.smack.PacketListener;
import org.jivesoftware.smack.packet.Packet;

import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.os.Handler;
import cc.telecomdigital.tdstock.R;
import cc.telecomdigital.tdstock.Framework.UniqueItem.TDStockLog;
import cc.telecomdigital.tdstock.activity.SplashActivity;
import cc.telecomdigital.tdstock.activity.groups.more.push.util.MyJsonRead;
import cc.telecomdigital.tdstock.activity.groups.more.push.util.ReadString;

/**
 * This class notifies the receiver of incoming notifcation packets
 * asynchronously.
 * 
 * @author hunter
 */
public class NotificationPacketListener implements PacketListener
{

	private static final String	TAG	= NotificationPacketListener.class
										.getSimpleName();

	private final XmppManager	xmppManager;

	private Handler			hanlder;

	public NotificationPacketListener(XmppManager xmppManager)
	{
		this.xmppManager = xmppManager;
		hanlder = new Handler();
	}

	@Override
	public void processPacket(Packet packet)
	{
		TDStockLog.d(TAG, "NotificationPacketListener.processPacket()...");
		TDStockLog.d(TAG, "packet.toXML()=" + packet.toXML());

		if (packet instanceof NotificationIQ)
		{
			NotificationIQ notification = (NotificationIQ) packet;

			if (notification.getChildElementXML().contains(
					"androidpn:iq:notification"))
			{
				String notificationId = notification.getId();
				String notificationApiKey = notification.getApiKey();
				String notificationTitle = notification.getTitle();
				String notificationMessage = notification.getMessage();
				// String notificationTicker = notification.getTicker();
				String notificationUri = notification.getUri();
				if (notificationUri != null
						&& notificationUri.equals("close"))
				{
					process(Constants.ANDROID_PUSH_SERVER_CLOSE);
					return;
				}
				else if (notificationUri != null
						&& notificationUri.equals("clear"))
				{
					process(Constants.ANDROID_PUSH_SERVER_SESSION_CLEAR);
					return;
				}
				MyJsonRead mjr = new MyJsonRead(notificationMessage);
				Map<String, String> maps = mjr.getContent();
				String message = maps.get("message").equals(" ") ? " "
						: ReadString.read(maps.get("message"));
				String messageid = maps.get("messageid").equals(" ") ? " "
						: ReadString.read(maps.get("messageid"));
				String messagetypeid = maps.get("messagetypeid")
						.equals(" ") ? " " : ReadString.read(maps
						.get("messagetypeid"));
				Intent intent = new Intent(
						Constants.ACTION_SHOW_NOTIFICATION);
				intent.putExtra(Constants.NOTIFICATION_ID, notificationId);
				intent.putExtra(Constants.NOTIFICATION_API_KEY,
						notificationApiKey);
				intent.putExtra(Constants.NOTIFICATION_TITLE,
						notificationTitle);
				intent.putExtra(Constants.NOTIFICATION_MESSAGE, message);
				intent
						.putExtra(Constants.NOTIFICATION_URI,
								notificationUri);
				intent.putExtra(Constants.NOTIFICATION_MESSAGE_ID,
						messageid);
				intent.putExtra(Constants.NOTIFICATION_MESSAGE_TYPE_ID,
						messagetypeid);
				// intent.setData(Uri.parse((new StringBuilder(
				// "notif://notification.androidpn.org/")).append(
				// notificationApiKey).append("/").append(
				// System.currentTimeMillis()).toString()));

				xmppManager.getContext().sendBroadcast(intent);
			}
		}

	}

	public void process(int delayTime)
	{
		hanlder.postDelayed(new Runnable()
		{

			@Override
			public void run()
			{
				// TODO Auto-generated method stub
				android.app.ActivityManager am = (android.app.ActivityManager) xmppManager
						.getContext().getSystemService(
								Context.ACTIVITY_SERVICE);
				ComponentName com = am.getRunningTasks(2).get(0).topActivity;
				if (com.getPackageName().equals(
						xmppManager.getContext().getPackageName()))
				{ // 软件正在前台运行
					//XmppManager.flag=false;
					SplashActivity.startService(true);
					TDStockLog.d(TAG, "push service1重启成功");
				}
				else
				{
					ServiceManager serviceManager = new ServiceManager(xmppManager.getContext());
					serviceManager.setNotificationIcon(R.drawable.favicon);
					NotificationService.flag = true;
					//XmppManager.flag=false;
					serviceManager.startService(TAG);
					TDStockLog.d(TAG, "push service2重启成功");
				}
			}
		}, delayTime);
	}

}
